package org.graduation.recruitment.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.graduation.recruitment.entity.pojo.Job;
import org.graduation.recruitment.service.JobService;
import org.graduation.recruitment.utils.ResponseResult;
import org.graduation.recruitment.utils.Token;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@Slf4j
@RequestMapping("/job")
@Tag(name = "工作岗位接口", description = "提供工作岗位相关的CRUD操作")
@SecurityRequirement(name = "openApiSecurityScheme")
public class JobController {

    @Autowired
    private JobService jobService;
    @Autowired
    private Token token;

    /**
     * 获取岗位列表
     *
     * @param page 请求的页数
     * @param size 每页显示的数量
     * @return 返回岗位信息列表
     */
    @GetMapping("/list/{page}/{size}")
    @Operation
    public ResponseResult<List<Job>> getJobList(@PathVariable Integer page, @PathVariable Integer size) {
        // 如果未指定页数和大小，使用默认值
        if (page == null) {
            page = 1;
        }
        if (size == null) {
            size = 10;
        }
        return ResponseResult.success(jobService.selectJobPage(page, size).getRecords());
    }

    /**
     * 获取岗位总数
     *
     * @return 返回岗位总数
     */
    @GetMapping("/count")
    public ResponseResult getCount() {
        return ResponseResult.success(jobService.getCount());
    }

    /**
     * 添加岗位
     *
     * @param job      岗位信息
     * @param tokenStr 用户令牌
     * @return 添加成功返回岗位信息，失败返回错误信息
     */
    @PostMapping("/add")
    @Operation(summary = "添加岗位接口")
    public ResponseResult addJob(@RequestBody Job job, @RequestHeader("Authorization") String tokenStr) {
        // 验证用户类型，只有企业才能创建岗位
        String userType = token.getClaim(tokenStr, "userType").toString().replace("\"", "");
        if (!userType.equalsIgnoreCase("enterprise")) {
            return ResponseResult.fail("只有企业才能创建岗位");
        } else {
            job.setEnterpriseId(token.getUidByToken(tokenStr));
        }
        jobService.saveJob(job);
        return ResponseResult.success(job);
    }

    /**
     * 更新岗位信息
     *
     * @param job      岗位信息
     * @param tokenStr 用户令牌
     * @return 更新成功返回岗位信息，失败返回错误信息
     */
    @PostMapping("/update")
    @Operation(summary = "更新岗位接口")
    public ResponseResult updateJob(@RequestBody Job job, @RequestHeader("Authorization") String tokenStr) {
        // 验证用户类型，只有企业才能更新岗位信息
        String userType = token.getClaim(tokenStr, "userType").toString().replace("\"", "");
        if (!userType.equalsIgnoreCase("enterprise")) {
            return ResponseResult.fail("没有修改权限");
        } else {
            job.setEnterpriseId(token.getUidByToken(tokenStr));
            job.setUpdatedDate(new Date());
        }
        jobService.updateById(job);
        return ResponseResult.success(job);
    }

    /**
     * 删除岗位
     *
     * @param job      岗位信息
     * @param tokenStr 用户令牌
     * @return 删除成功返回成功信息，失败返回错误信息
     */
    @PostMapping("/delete")
    @Operation(summary = "删除岗位接口")
    public ResponseResult deleteJob(@RequestBody Job job, @RequestHeader("Authorization") String tokenStr) {
        // 验证用户类型，只有企业才能删除岗位
        String userType = token.getClaim(tokenStr, "userType").toString().replace("\"", "");
        if (!userType.equalsIgnoreCase("enterprise")) {
            return ResponseResult.fail("没有删除权限");
        } else {
            job.setEnterpriseId(token.getUidByToken(tokenStr));
        }
        if (jobService.delete(job.getId())) {
            return ResponseResult.success();
        } else {
            return ResponseResult.fail("删除失败");
        }
    }

    /**
     * 通过ID获取岗位信息
     *
     * @param id 岗位ID
     * @return 返回岗位信息
     */
    @GetMapping("/info/{id}")
    @Operation(summary = "通过id查看岗位信息")
    public ResponseResult getJobInfoById(@PathVariable Long id) {
        return ResponseResult.success(jobService.getById(id));
    }

    /**
     * 通过企业ID获取该企业下所有岗位信息
     *
     * @param tokenStr 用户令牌
     * @return 返回企业下的岗位信息列表
     */
    @GetMapping("/list/enterprise")
    @Operation(summary = "通过企业id查看企业下面所有的岗位信息")
    public ResponseResult getJobListByEnterpriseId(@RequestHeader("Authorization") String tokenStr) {
        Long enterpriseId = token.getUidByToken(tokenStr);
        List<Job> list = jobService.listByEnterpriseId(enterpriseId);
        return ResponseResult.success(list);
    }
}
